﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using Volo.Abp.Domain.Repositories;
using mozhi.smarterp.Finance.Enums;

namespace mozhi.smarterp.Finance.Treasuries.Repositories
{
    public interface IPaymentRepository : IRepository<Payment, Guid>
    {
        Task<long> GetCountAsync(string keyword , PaymentType? type , bool? isAdvance , DateTime? startDate , DateTime? endDate , Guid? bankAccountId , Guid? currencyId  , Guid? excludeId, CancellationToken cancellationToken = default(CancellationToken));

        Task<List<Payment>> GetListAsync(string keyword, PaymentType? type, bool? isAdvance, DateTime? startDate, DateTime? endDate, Guid? bankAccountId, Guid? currencyId, bool incldueDetials = false , CancellationToken cancellationToken = default(CancellationToken));

        Task<List<Payment>> GetPagedListAsync(string keyword, PaymentType? type, bool? isAdvance, DateTime? startDate, DateTime? endDate, Guid? bankAccountId, Guid? currencyId, int maxResultCount, int sikpCount, string sorting, bool incldueDetials = false, CancellationToken cancellationToken = default(CancellationToken));

        Task<string> GetLatestNumberAsync();

        Task<List<Payment>> GetListAsync(List<Guid> ids, bool incldueDetials = false, CancellationToken cancellationToken = default(CancellationToken));
    }
}
